Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Server to client error messages #1406

Merged
merged 9 commits into from
Jul 3, 2024
Merged

Conversation

robacourt
Copy link
Contributor

@robacourt robacourt commented Jun 27, 2024

https://linear.app/electric-sql/issue/VAX-1983/improve-error-reporting-from-server-to-client

This PR add the ability of the client to show friendly error messages when the error has originated on the server.

For example:

an error occurred in satellite: INVALID_REQUEST Unexpected value for int2 column: 32769

At this stage I've not tried to hide any noise such as the stack trace in these scenarios. So the user in fact sees all of this:

an error occurred in satellite: INVALID_REQUEST Unexpected value for int2 column: 32769
Client can't connect with the server after a fatal error. This can happen due to divergence between local client and server. Use developer tools to clear the local database, or delete the database file. We're working on tools to allow recovering the state of the local database.
/Users/rob/src/electric-sql/electric/clients/typescript/dist/satellite/error.js:35
  return new SatelliteError(
         ^


SatelliteError: Fatal error: Unexpected value for int2 column: 32769. Check log for more information
    at wrapFatalError (/Users/rob/src/electric-sql/electric/clients/typescript/dist/satellite/error.js:35:10)
    at SatelliteProcess._handleOrThrowClientError (/Users/rob/src/electric-sql/electric/clients/typescript/dist/satellite/process.js:542:13)
    at SatelliteProcess._handleClientError (/Users/rob/src/electric-sql/electric/clients/typescript/dist/satellite/process.js:525:10)
    at <anonymous> (/Users/rob/src/electric-sql/electric/clients/typescript/dist/util/asyncEventEmitter.js:103:17)
    at Array.map (<anonymous>)
    at AsyncEventEmitter.processQueue (/Users/rob/src/electric-sql/electric/clients/typescript/dist/util/asyncEventEmitter.js:101:32)
    at AsyncEventEmitter.enqueueEmit (/Users/rob/src/electric-sql/electric/clients/typescript/dist/util/asyncEventEmitter.js:129:12)
    at SatelliteClient.handleError (/Users/rob/src/electric-sql/electric/clients/typescript/dist/satellite/client.js:725:18)
    at Object.SatErrorResp (/Users/rob/src/electric-sql/electric/clients/typescript/dist/satellite/client.js:98:37)
    at SatelliteClient.handleIncoming (/Users/rob/src/electric-sql/electric/clients/typescript/dist/satellite/client.js:801:47) {
  code: 12
}

I've also added friendly error message generation on the server for data validation errors as an example of how you would implement the friendly error messages. Once the permissions system has been added, rejected writes could also generate a friendly error message in a similar way.

The client will now also see error messages that were already being set in the SatErrorResp such as:

  • Postgres is unavailable
  • Acknowledged unknown txn
  • Connection to central database failed, cannot continue the replication because of possible consistency issues

@robacourt robacourt marked this pull request as ready for review June 27, 2024 13:28
@kevin-dp
Copy link
Contributor

Minor comment but i think the error that is displayed on the client should make very clear that this is a server-side error, otherwise it will confuse people and they will think there is a problem with the client.

@robacourt robacourt force-pushed the rob/server-to-client-error-messages branch from 40b14a1 to dfb94aa Compare July 1, 2024 09:48
@robacourt
Copy link
Contributor Author

Minor comment but i think the error that is displayed on the client should make very clear that this is a server-side error, otherwise it will confuse people and they will think there is a problem with the client.

The error message is now:

an error occurred in satellite: INVALID_REQUEST Server error: Unexpected value for int2 column: 32769

Hope that's clean enough @kevin-dp ?

@robacourt robacourt merged commit 392a36b into main Jul 3, 2024
15 checks passed
@robacourt robacourt deleted the rob/server-to-client-error-messages branch July 3, 2024 12:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants